from datetime import datetime
from app.models.user import User
from app.utils.db import db

class UserService:
    """
    用户服务类，处理用户相关业务逻辑
    """
    
    @staticmethod
    def get_all_users():
        """获取所有用户"""
        return db.select(User)
    
    @staticmethod
    def get_user_by_id(user_id):
        """根据ID获取用户"""
        users = db.select(User, id=user_id)
        return users[0] if users else None
    
    @staticmethod
    def get_user_by_name(username):
        """根据用户名获取用户"""
        users = db.select(User, name=username)
        return users[0] if users else None
    
    @staticmethod
    def create_user(data):
        """
        创建新用户
        :param data: 字典，包含用户数据
        :return: 创建的用户对象
        """
        # 检查用户名是否已存在
        existing_user = UserService.get_user_by_name(data.get('name'))
        if existing_user:
            raise ValueError("用户名已存在")
            
        # 创建用户对象
        user = User(
            name=data.get('name'),
            email=data.get('email'),
            password=data.get('password'),
            description=data.get('description'),
            is_admin=1 if data.get('is_admin') == 'true' else 0,
            is_active=1 if data.get('is_active') == 'true' else 0,
            created_at=datetime.now()
        )
        
        # 保存到数据库
        return db.insert(user)
    
    @staticmethod
    def update_user(user_id, data):
        """
        更新用户信息
        :param user_id: 用户ID
        :param data: 字典，包含要更新的用户数据
        """
        # 检查用户是否存在
        user = UserService.get_user_by_id(user_id)
        if not user:
            raise ValueError("用户不存在")
            
        # 准备更新数据
        updates = {
            "name": data.get('name'),
            "email": data.get('email'),
            "description": data.get('description'),
            "is_admin": 1 if data.get('is_admin') == 'true' else 0,
            "is_active": 1 if data.get('is_active') == 'true' else 0,
            "updated_at": datetime.now()
        }
        
        # 如果提供了新密码，则更新密码
        if data.get('password'):
            updates["password"] = data.get('password')
        
        # 更新数据库
        db.update(User, updates, id=user_id)
        
        return UserService.get_user_by_id(user_id)
    
    @staticmethod
    def delete_user(user_id):
        """
        删除用户
        :param user_id: 用户ID
        """
        # 检查用户是否存在
        user = UserService.get_user_by_id(user_id)
        if not user:
            raise ValueError("用户不存在")
            
        # 从数据库删除
        db.delete(User, id=user_id) 